/*
猫咪问诊 对应的 AI 模块和接口
采用 阿里云的百炼 API
*/

package v1

import (
    "bytes"
    "encoding/json"
    "io"
    "log"
    "net/http"
    "os"

    "gitee.com/keeving/quanta-test-cat/utils"
    "github.com/gin-gonic/gin"
)

type Message struct {
    Role    string `json:"role"`
    Content string `json:"content"`
}

type RequestBody struct {
    Model    string    `json:"model"`
    Messages []Message `json:"messages"`
}

type Question struct {
    Question string `json:"question"`
}

func AI(c *gin.Context) {
    // 解析前端传来的 JSON 数据
    var data Question
    if err := c.ShouldBindJSON(&data); err != nil {
        log.Fatal(err)
    }
    // 创建 HTTP 客户端
    client := &http.Client{}
    // 构建请求体
    requestBody := RequestBody{
        // 模型列表：https://help.aliyun.com/zh/model-studio/getting-started/models
        Model: utils.Model,
        Messages: []Message{
            {
                Role:    "system",
                Content: "You are a helpful assistant.",
            },
            {
                Role:    "user",
                Content: data.Question,
            },
        },
    }
    jsonData, err := json.Marshal(requestBody)
    if err != nil {
        log.Fatal(err)
    }
    // 创建 POST 请求
    req, err := http.NewRequest("POST", "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions", bytes.NewBuffer(jsonData))
    if err != nil {
        log.Fatal(err)
    }
    // 设置请求头
    // 若没有配置环境变量，请用百炼API Key将下行替换为：apiKey := "sk-xxx"
    apiKey := os.Getenv(utils.ApiKey)
    req.Header.Set("Authorization", "Bearer "+apiKey)
    req.Header.Set("Content-Type", "application/json")
    // 发送请求
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    // 读取响应体
    bodyText, err := io.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    // 打印响应内容
    // fmt.Printf("%s\n", bodyText)
    // return bodyText

    // c.JSON(http.StatusOK, gin.H{"data": string(bodyText)})
    
    // 暂时返回静态数据
    c.JSON(http.StatusOK, gin.H{
        "code":  200,
        "data":  "返回静态数据：" + data.Question,
        "dataText": bodyText,
        "msg":   "操作成功",
    })
}